Working with FASTQ Sequence

FASTQ Format Handling

  • Exploring Data

  • Reading Data

  • Cleaning Data

  • FASTQ Format Handling Template

# get data 
!wget http://d28rh4a8wq0iu5.cloudfront.net/ads1/data/SRR835775_1.first1000.fastq
--2020-09-19 22:52:26--  http://d28rh4a8wq0iu5.cloudfront.net/ads1/data/SRR835775_1.first1000.fastq
Resolving d28rh4a8wq0iu5.cloudfront.net (d28rh4a8wq0iu5.cloudfront.net)... 
13.227.214.178, 13.227.214.22, 13.227.214.185, ...
Connecting to d28rh4a8wq0iu5.cloudfront.net (d28rh4a8wq0iu5.cloudfront.net)|13.227.214.178|:80... 
connected.
HTTP request sent, awaiting response... 
200 OK
Length: 224786 (220K) [application/octet-stream]
Saving to: ‘SRR835775_1.first1000.fastq’


          SRR835775   0%[                    ]       0  --.-KB/s               
         SRR835775_  14%[=>                  ]  31.09K   119KB/s               
        SRR835775_1  42%[=======>            ]  92.73K   195KB/s               
       SRR835775_1.  96%[==================> ] 210.76K   220KB/s               
SRR835775_1.first10 100%[===================>] 219.52K   229KB/s    in 1.0s    

2020-09-19 22:52:30 (229 KB/s) - ‘SRR835775_1.first1000.fastq’ saved [224786/224786]

Exploring Data

# examine first few lines 
!head ../data/SRR835775_1.first1000.fastq
@SRR835775.1 1/1
TAACCCTAACCCTAACCCTAACCCTAACCCTAACCCTAACCCTAACCCTAACCCTCACCCTAACCCTAACCCTAACCGTATCCGTCACCCTAACCCTAAC
+
???B1ADDD8??BB+C?B+:AA883CEE8?C3@DDD3)?D2;DC?8?=BAD=@C@(.6.6=A?=?@##################################
@SRR835775.2 2/1
TAACCCTAACCCTAACCCTAACCCTAACCCTAACCCTAACCCTAACCCTAACCCTACCCTAACCCTAACCCTAACCCTAACCCTAACCCTAACCCTAACC
+
CCCFFFFFGHHGHJJJJJIJGIIJJJJJJJIJIJJJJJFJJFGIIIIH=CBFCF=CCEG)=>EHB2@@DEC>;;?=;(=?BBD?59?BA###########
@SRR835775.3 3/1
TAGGGTTAGGGTTAGGGTTAGGGTTAGGGTTAGGGTTAGGGTTAGGGTTAGGGTTAGGGTTAGGGTTAGGGTTAGGGTTAGGGTTAGGGTTAGGGTTAGG
# examine first few lines 
!tail ../data/SRR835775_1.first1000.fastq
+
@@CFFFFFHHHAFHI@GBHIHIIGGGE?DGGI<GGIIGHDGHIIGICHIFHHHHFDEBCECCECCCCCCC@@CACBBAB#####################
@SRR835775.999 999/1
GGCTGCCCCTGCAGGTCCCTGTCACCTCTCACATGTCCCTGCCTAATCTTGCAGGTCCCAGAGAACTACTTCTATGTGCCAGACCTGGGCCAGGTGCCTG
+
@@CFFDFFHHFGFJJGHIICHEHGJJIEGIIJJJJJJJJJJJJJIGGJJJIJJJIHHGHIJJJIHIIJJHGHHHGHFFFFFFCDDDCBDDDDDD@CCCDC
@SRR835775.1000 1000/1
GTTGGCTGCCCCTGCAGGTCCCTGTCACCTCTCACATGTCCCTGCCTAATCTTGCAGGTCCCAGAGAACTACTTCTATGTGCCAGACCTGGGCCAGGTGC
+
C@CFFFFFHHHHGHGGHIFIIJJJHJJJIGIIJIIIIIIJIJJJJJEBGIJJJJJGGJBFEFGHIJEGEEEHGECBDFFFFEEEDDDDDC=BBDDBB>AD
# convert quality score character to numeric 
ord("?")
63
ord("B")
66
ord("#")
35

Reading Data

# open file 
with open("../data/SRR835775_1.first1000.fastq", "r") as f: 
    seq = f.read()
seq[:500]
'@SRR835775.1 1/1\nTAACCCTAACCCTAACCCTAACCCTAACCCTAACCCTAACCCTAACCCTAACCCTCACCCTAACCCTAACCCTAACCGTATCCGTCACCCTAACCCTAAC\n+\n???B1ADDD8??BB+C?B+:AA883CEE8?C3@DDD3)?D2;DC?8?=BAD=@C@(.6.6=A?=?@##################################\n@SRR835775.2 2/1\nTAACCCTAACCCTAACCCTAACCCTAACCCTAACCCTAACCCTAACCCTAACCCTACCCTAACCCTAACCCTAACCCTAACCCTAACCCTAACCCTAACC\n+\nCCCFFFFFGHHGHJJJJJIJGIIJJJJJJJIJIJJJJJFJJFGIIIIH=CBFCF=CCEG)=>EHB2@@DEC>;;?=;(=?BBD?59?BA###########\n@SRR835775.3 3/1\nTAGGGTTAGGGTTAGGGTTAGGGTTAGGGTTAGGGTTAGGG'
# remove name line 
with open("../data/SRR835775_1.first1000.fastq", "r") as f: 
    seq = f.readline()
    seq = f.read()
seq[:500]
'TAACCCTAACCCTAACCCTAACCCTAACCCTAACCCTAACCCTAACCCTAACCCTCACCCTAACCCTAACCCTAACCGTATCCGTCACCCTAACCCTAAC\n+\n???B1ADDD8??BB+C?B+:AA883CEE8?C3@DDD3)?D2;DC?8?=BAD=@C@(.6.6=A?=?@##################################\n@SRR835775.2 2/1\nTAACCCTAACCCTAACCCTAACCCTAACCCTAACCCTAACCCTAACCCTAACCCTACCCTAACCCTAACCCTAACCCTAACCCTAACCCTAACCCTAACC\n+\nCCCFFFFFGHHGHJJJJJIJGIIJJJJJJJIJIJJJJJFJJFGIIIIH=CBFCF=CCEG)=>EHB2@@DEC>;;?=;(=?BBD?59?BA###########\n@SRR835775.3 3/1\nTAGGGTTAGGGTTAGGGTTAGGGTTAGGGTTAGGGTTAGGGTTAGGGTTAGGGTTAGG'
# read base sequence 
with open("../data/SRR835775_1.first1000.fastq", "r") as f: 
    seq = f.readline()
    seq = f.read()
seq[:500]
'TAACCCTAACCCTAACCCTAACCCTAACCCTAACCCTAACCCTAACCCTAACCCTCACCCTAACCCTAACCCTAACCGTATCCGTCACCCTAACCCTAAC\n+\n???B1ADDD8??BB+C?B+:AA883CEE8?C3@DDD3)?D2;DC?8?=BAD=@C@(.6.6=A?=?@##################################\n@SRR835775.2 2/1\nTAACCCTAACCCTAACCCTAACCCTAACCCTAACCCTAACCCTAACCCTAACCCTACCCTAACCCTAACCCTAACCCTAACCCTAACCCTAACCCTAACC\n+\nCCCFFFFFGHHGHJJJJJIJGIIJJJJJJJIJIJJJJJFJJFGIIIIH=CBFCF=CCEG)=>EHB2@@DEC>;;?=;(=?BBD?59?BA###########\n@SRR835775.3 3/1\nTAGGGTTAGGGTTAGGGTTAGGGTTAGGGTTAGGGTTAGGGTTAGGGTTAGGGTTAGG'
seq = seq.replace("\n", "")
seq[:500]
'TAACCCTAACCCTAACCCTAACCCTAACCCTAACCCTAACCCTAACCCTAACCCTCACCCTAACCCTAACCCTAACCGTATCCGTCACCCTAACCCTAAC+???B1ADDD8??BB+C?B+:AA883CEE8?C3@DDD3)?D2;DC?8?=BAD=@C@(.6.6=A?=?@##################################@SRR835775.2 2/1TAACCCTAACCCTAACCCTAACCCTAACCCTAACCCTAACCCTAACCCTAACCCTACCCTAACCCTAACCCTAACCCTAACCCTAACCCTAACCCTAACC+CCCFFFFFGHHGHJJJJJIJGIIJJJJJJJIJIJJJJJFJJFGIIIIH=CBFCF=CCEG)=>EHB2@@DEC>;;?=;(=?BBD?59?BA###########@SRR835775.3 3/1TAGGGTTAGGGTTAGGGTTAGGGTTAGGGTTAGGGTTAGGGTTAGGGTTAGGGTTAGGGTTAGGGT'
seq = seq.replace("\t", "")
seq[:500]
'TAACCCTAACCCTAACCCTAACCCTAACCCTAACCCTAACCCTAACCCTAACCCTCACCCTAACCCTAACCCTAACCGTATCCGTCACCCTAACCCTAAC+???B1ADDD8??BB+C?B+:AA883CEE8?C3@DDD3)?D2;DC?8?=BAD=@C@(.6.6=A?=?@##################################@SRR835775.2 2/1TAACCCTAACCCTAACCCTAACCCTAACCCTAACCCTAACCCTAACCCTAACCCTACCCTAACCCTAACCCTAACCCTAACCCTAACCCTAACCCTAACC+CCCFFFFFGHHGHJJJJJIJGIIJJJJJJJIJIJJJJJFJJFGIIIIH=CBFCF=CCEG)=>EHB2@@DEC>;;?=;(=?BBD?59?BA###########@SRR835775.3 3/1TAGGGTTAGGGTTAGGGTTAGGGTTAGGGTTAGGGTTAGGGTTAGGGTTAGGGTTAGGGTTAGGGT'

FASTQ Format Handling Template

def readFastq(filename):
    """Reads FASTQ file and remove the special characters!"""
    sequences = []
    qualities = []
    with open(filename) as fh:
        while True:
            fh.readline() # skip name line
            seq = fh.readline().rstrip() # read base sequence
            fh.readline() # skip placeholder line
            qual = fh.readline().rstrip() #base quality line
            if len(seq) == 0:
                break
            sequences.append(seq)
            qualities.append(qual)
    return sequences, qualities
seqs, quals = readFastq('../data/SRR835775_1.first1000.fastq')
seqs[:20]
['TAACCCTAACCCTAACCCTAACCCTAACCCTAACCCTAACCCTAACCCTAACCCTCACCCTAACCCTAACCCTAACCGTATCCGTCACCCTAACCCTAAC',
 'TAACCCTAACCCTAACCCTAACCCTAACCCTAACCCTAACCCTAACCCTAACCCTACCCTAACCCTAACCCTAACCCTAACCCTAACCCTAACCCTAACC',
 'TAGGGTTAGGGTTAGGGTTAGGGTTAGGGTTAGGGTTAGGGTTAGGGTTAGGGTTAGGGTTAGGGTTAGGGTTAGGGTTAGGGTTAGGGTTAGGGTTAGG',
 'TAGGGTTAGGGTTAGGGTTAGGGTTAGGGTTAGGGTTAGGGTTAGGGTTAGGGTTAGGGTTAGGGTTAAGGGTTGGGGGTTAGGGGTAGGGGTAGGGTTA',
 'CTAACCCTAACCCTAACCCTAACCCTACCCTAACCCTAACCCTAACCCTAACCCTAACCCTAACCCTAACCCTAACCCAACCCTAACCCTAACCCTCACC',
 'AACCCTAACCCTAACCCTAACCCTAACCCTAACCCCTAACCCTAACCCTACCCCTAACCCCCAACCCTCACACCAACCCTAACCCTACCCCCAACCCCAC',
 'TAGGGGTTAGGGTTAGGGTTAGGGTTAGGGTTAGGGTTAGGGCTGGGTTAGGGGTAGGGTTAGGGTTAGGGTTAGGGGTAGGAGTTCGGGAGAGCACACG',
 'TAACCCTAACCCTAACCCTAACCCTAACCCTAACCCTAACCCTAACCCTAACCCCAACCCCAACCCCAACCCCAACCCTAACCCTAAACCCAAACCTAAA',
 'AGGGTTAGGGTTAGGGGTTAGGGTTAGGGTTAGGGTTAGGGTTAGGGTTAGGGTTAGGGTTAGGGTTAGGGTTAGGGGTTAGGGTTGGGGTTAGGGTTGG',
 'TAGGGTTAGGGTTAGGGTTAGGGGTTAGGGTTAGGGTTAGGGTTAGGGTTAGGGTTAGGGTTGGGGTAGGGGTTGGGGTAGGGGTAGGGGTGGGGGTGGG',
 'TAACCCTAACCCTAACCCTAACCCTAACCCAACCCTAACCCTAACCCTAACCCTAACCCTAACCCTAACCCTAACCCTAACCCTACCCTACCCTAACCCT',
 'AGGGTTAGGGTTAGGGTAGGGTTAGGGTTAGGGTTAGGGGTAGGGGTGGGGGTAGGGGGTAGGGGGTGGGGGGAGGGTTAGGGTTTGGGTTCGGGGTAGG',
 'ACCCTAACCCTAACCCTAACCCTAACCCAACCCTAACCCTAACCCTAACCCTAACCCTAACCCTAACCCTAACCCTAACCCTAACCCTAACCCCTACCCA',
 'CCTAACCCTAACCCTAACCCTAACCCAACCCTAACCCTAACCCTAACCCTAACCCTAACCCTAACCCTAACCCTAACCCTACCCTACCCTAACCCTAACC',
 'CTAACCCTAACCCTAACCCTAACCCTAACCCTAACCCTAACCCTAACCCTAACCCTAACCCTAACCCTAACCCTAACCCTAACCCTAACCCTAACCCTAA',
 'AACCCTAACCCTAACCCTAACCCTAACCCTAACCCTAACCCTAACCCTAACCCTAACCCTAACCCTAACCCTAACCCTAACCCTAACCCTAACCCTAACC',
 'AACCCTAACCCTAACCCTAACCCTAACCCTAACCCTAACCCTAACCCTAACCCTAACCCTAACCCTAACCCTAACCTTAACCTAAACCCTAACCCAAACC',
 'GGTTAGGGTTAGGGTTAGGGTTAGGGTTAGGGTTAGGGTTAGGGTAGGGGTAGGGGTAGGGTTAGGGTTAGGGTTAGGGTTAGGGTTAGGGGTAGGGTTA',
 'GTTAGGGTTAGGTTAAGGTTAAGGTTAGGGTTAGGTTAAGGTTAAGGTTAGGTTAAGGTTAAGGGTTAGGGTTAGGGTTAGGGTTAGGGTTAGGGTTAGG',
 'TTAGGGTTAGGGTTAGGGTTAGGGTTAGGGTTAGGGTTAGGGTTAGGGTTAGGGTTAGGGTTCGGGTTAGGGTTAGGGTTAGGGTTAGGGTTGGGGTTGG']
len(seqs)
1000
quals[:20]
['???B1ADDD8??BB+C?B+:AA883CEE8?C3@DDD3)?D2;DC?8?=BAD=@C@(.6.6=A?=?@##################################',
 'CCCFFFFFGHHGHJJJJJIJGIIJJJJJJJIJIJJJJJFJJFGIIIIH=CBFCF=CCEG)=>EHB2@@DEC>;;?=;(=?BBD?59?BA###########',
 '@@<DD?DDHHH<CBHII:CFGIGAGHIIG?CCGGE0BDHIIHIGICH8=FHGI=@EHGGGEEHH>);?CC@.;(=;?59,5<A599?CB>ABBCB><88A',
 '@CCFFDDFHHHDFHIJJCGGIJJHIIHJC?DHHIJ0?DGHI9BBFHICGGIGI=CDEGI=?AAEF7@?################################',
 '@<@FDFDDBBFHH@EBGGGEH@FFHE;EHIEGGBHG?)9?8BDGGBGGBCDGI=93=C6==C;CCD(?@>@#############################',
 'CCCFFDFDHGHHDHHGIIIHGIJ<GBBBFBGGHDIH@B)?)0?F>DB#####################################################',
 "???=DD0@3ADB<<CE;+3<;EE?1:)1?C1?3BDCB@;)99)0;@;)-(.7A'55A1?.6;(6;.5;;??#############################",
 "@@@DDF?EFFHA;DDHGI<FDFGECCHF:C9DH9F3):??GHB)BFHEAHBG;C';C@EE45?#####################################",
 '@@@FADDFHGBFFHJJJFGEHGGGGCEGHCBFGGJ:D?FGIDHDFGIBFDGIJ=CEHDH7?=BFD@A;>AB5=2=?BB######################',
 '@CCFFADDHHH<CBGIICGGHIJI?FFGHJ?DHGIJ?DGIIIBFCHHI8@@GEE.==A?C########################################',
 'CCCFFFFDHDHHHCIEIJJJICEGHIJIJIHIIII>FFGGG>GCGH9(B@FGE>EEGCH>A;C(;;;3>>A2;(;;A99(<A<(9ABD@?##########',
 '<@<BDDDDD8CD?CGE<<CA;<<+2:C9:??FC*:8BGG)??##########################################################',
 ';?@FFDADFHGBHIGGHIGGGGGI;FGCD8CFH3B?BD89?)?FH>;=C;C;==@DHGH<EEED;)6>AB@(=A(5;99?B###################',
 'CCCFFFFFHHGHHJIIJIJJIIIJJJFHHHHGCHGIJGIJGDHEIJIGIDHH@CH;DEEFC6?BB@D(;>;=A(;5=99(59?B################',
 'C@CFFFFFHHHHHIIJJJJGJIIJJIIJEHGGHJGIIEI@FHIIIJIFCGHCEHCEECH>E@CEDDFBECCCDDCCB?A?ACDBD<<3<8<AC?B8?8<9',
 '<<@BDDAB?CFDH;CCE;BAGHICHGHEHIIIIIG;?FFGHIAHIHHGIIIIIB;=@EDD>AEH=D>>;@;@>===A(=CBBB@??99?<<?8?2?<C?B',
 'CCCFFFFFHHHHHIJJJJJJJJJJJJJHGGIIJJJJJJJJJJIIJIJJJJJGGIJJIIJJEHEHEFEEFE2;@ABD(;@CDD##################',
 "BBBDDFFFDHHHHJEHHIJJCGEHIJ:EFIHI?GDHHI9BFHIIB?;CF'B;FHI'=:ADF.;;>>@(,(55?,559?A(5(8<B(8289?&0)2??322",
 '@@@FFFDDFDHFFHEIIGHG@EHJFGGGGCEGCGCCFBEGI?FHGIJDDFGH?FC@DH8B@:CAGCAEGIG@E2A?D7;BEDE;@=?C?;9?BD?5<?BC',
 'B@CFFFBDHHHHAGGFHJCGEHIJFHGIHI?HFGIJ:DDGHJDHFFHI=FCHHG@EAEHHAE9@DD?B;ACD;?(9<A>A9<AB+82<CD##########']
ord('#') 
35
ord('?')
63